package com.sjgl.esdn.service;

import com.sjgl.esdn.domain.entity.Column;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * 专栏服务
 *
 * @author 缪恒铭
 * @date 2022/08/11
 */
public interface ColumnService {
    /**
     * 插入专栏
     *
     * @param userId      用户id
     * @param columnName 专栏名字
     * @return int
     */
    public int insertColumn(@Param("userId") Long userId, @Param("columnName") String columnName, @Param("columnIntro") String columnIntro);

    /**
     * 删除专栏(真删)
     *
     * @param columnId 专栏id
     * @return int
     */
    public int deleteColumn(@Param("columnId") Long columnId);

    /**
     * 更新专栏
     *
     * @param columnId   专栏id
     * @param columnName 专栏名字
     * @param columnIntro       介绍
     * @param userId      用户id
     * @return int
     */
    public int updateColumn(@Param("columnId") Long columnId, @Param("columnName") String columnName, @Param("columnIntro") String columnIntro, @Param("userId") Long userId);

    /**
     * 选择专栏通过id
     *
     * @param columnId 专栏id
     * @return {@link Column}
     */
    public Column selectColumnById(@Param("columnId") Long columnId);

    /**
     * 选择文件id列表通过id
     *
     * @param columnId 专栏id
     * @return {@link List}<{@link Long}>
     */
    public List<Long> selectFileIdListById(@Param("columnId") Long columnId);

    /**
     * 查询专栏id列表通过用户id
     *
     * @param userId 用户id
     * @return {@link List}<{@link Long}>
     */
    public List<Long> selectColumnIdListByUserId(@Param("userId") Long userId);

    /**
     * 查询专栏列表通过专栏id列表
     *
     * @param columnIdList 专栏id列表
     * @return {@link List}<{@link Column}>
     */
    public List<Column> selectColumnListByColumnIdList(@Param("columnIdList") List<Long> columnIdList);

    /**
     * 选择专栏列表
     *
     * @return {@code List<Column>}
     */
    public List<Column> selectColumnList();

    /**
     * 得到预览路径
     *
     * @param columnId 专栏id
     * @return {@code String}
     */
    public String getPreviewPath(Long columnId);

    /**
     * 添加文件
     *
     * @param columnId 专栏id
     * @param fileId    文件标识
     * @return int
     */
    public int addFile(@Param("columnId") Long columnId, @Param("fileId") Long fileId);

    /**
     * 删除文件
     *
     * @param columnId 专栏id
     * @param fileId    文件标识
     * @return int
     */
    public int deleteFile(@Param("columnId") Long columnId, @Param("fileId") Long fileId);

    /**
     * 检查专栏唯一
     *
     * @param userId      用户id
     * @param columnName 专栏名字
     * @return int
     */
    public boolean checkColumnUnique(@Param("userId") Long userId, @Param("columnName") String columnName);

    /**
     * 检查专栏和文件唯一
     *
     * @param columnId 专栏id
     * @param fileId    文件id
     * @return boolean
     */
    public boolean isColumnAndFileExist(@Param("columnId") Long columnId, @Param("fileId") Long fileId);

    /**
     * 获得用户id
     *
     * @param columnId 专栏id
     * @return {@link Long}
     */
    public Long getUserId(@Param("columnId") Long columnId);

    /**
     * 查询专栏id通过用户id和专栏名字
     *
     * @param userId      用户id
     * @param columnName 专栏名字
     * @return {@link Long}
     */
    public Long selectColumnIdByUserIdAndColumnName(@Param("userId") Long userId, @Param("columnName") String columnName);
}
